#ifndef BHTPDVPLS_STRUCTS_H
#define BHTPDVPLS_STRUCTS_H

#include <sys/types.h>
#include <netinet/in.h>

typedef struct
{
  /*
   * Objekt ID, jedes Objekt auf den Bild welches relevant ist für den bot
   * bekommt eine ID, die Zuordnung Objekt <-> ID soll erhalten bleiben
   */
  uint16_t objektId;
  
  /*
   * X Kordinate in mm oben rechts im Bild ist 0/0.
   * Wenn das Objekt größer ist als 1 Pixel dann bezichnet die Kordinate die Mitte des Objektes
   */
  uint16_t xkordinate_mm;
  
  /*
   * Y Kordinate in mm oben rechts im Bild ist 0/0
   * Wenn das Objekt größer ist als 1 Pixel dann bezichnet die Kordinate die Mitte des Objektes
   */ 
  uint16_t ykordinate_mm;
  
  /*
   * Winkel in Grad 0° bis 359°
   * Drehrichtung ist gegen Uhrzeigersin
   * z.b. 0° ist Osten, 90° Süden, 180° Westen, 270° Süden und  
   */ 
  uint16_t theta_grad;
} Kordinate;

#define MAX_OBJEKTLISTE_KORD 10
typedef struct
{
  /*
   * Anzahl der gefüllten kord in der Liste kord 
   */
  uint16_t anzahlObjekte;
  
  /*
   * zeitstempel mit der zeit in Sekunden seit 1970
   */
  uint32_t zeitStempelSec;
  
  /*
   * liste mit den kordinaten
   */
  Kordinate kord[MAX_OBJEKTLISTE_KORD];
} ObjektListe;


typedef enum
{
  /*
   * Wird vom PLS an den Robot gesendet, anfrage der Position des Robots 
   */
  STATUS_REQUEST,
  
  /*
   * Sendet der Robot an den PLS zurück
   */
  STATUS_ANSWER,
  
  /*
   * PLS an robot, das nähste Pkg nach dieser Strucktur ist eine ObjektListe
   */
  OBJECTS_UPDATE,
  
  /*
   * PLS zu Camserver
   */
  OBJECTS_REQUEST,
  
  /*
   * PLS an robot setzte neues Ziel (aber noch nicht fahren)
   */
  DESTINATION_COMMAND,
  
  /*
   * PLS an robot, stope Robot
   */
  STOP_COMMAND,
  
  /*
   * PLS an robot, fahre los zu deinen ziel
   */
  START_COMMAND,
  
   /*
   * Fehler meldung die an das PLS gesedet werden kann
   */
  ERROR_MSG
} Command;

static const char * const commandToStr[] = {
  "STATUS_REQUEST", 
  "STATUS_ANSWER", 
  "OBJECTS_UPDATE", 
  "OBJECTS_REQUEST", 
  "DESTINATION_COMMAND", 
  "STOP_COMMAND", 
  "START_COMMAND",
  "ERROR_MSG"
};
  

typedef struct
{
  Command   cmd;
  union {
    Kordinate 	kord;
    struct {
      char 	msg[sizeof(Kordinate) - 1];
      uint8_t   errorId;
    };  
  };
} ComandPkg;


#endif // #ifndef BHTPDVPLS_STRUCTS_H

